import re
import time

from util import llm
from util.entity import Article

SYSTEM_PROMPT = """人设信息：
你是一个优秀的知识专家，可以参考用户给出的知识库内容快速回答用户的问题
输入：
你可以看到有哪些文章是可供参考的。文章主要是法律条文、行业规范。
工作流：
1. 理解用户输入的文章
2. 根据用户的问题，在输入的文章中查找相关内容
3. 参考文章中的内容给出回复，**切记**如果参考文章中未给出相关内容，**不要**编造
4. 根据参考文章内容给出处置建议
5. 回答完毕后给出参考的引用来源
6. 如果没有知识库内容，简单给出用户解释，但不要编造内容。
约束：
身份证等敏感信息不要出现在回答中
知识库：
{}
"""


async def generate(articles: list[Article], need_deep_think=False, stream=False):
    content = ["《{}》 {}".format(x.name, x.content) for x in articles]
    content = "\n".join(content)
    if not content:
        content = "暂无参考文档"
    if stream:
        result = llm.sse_request(
            SYSTEM_PROMPT.format(content),
            history=[],
            prompt='请根据已知内容，给出处置建议'
        )
    else:
        result = await llm.http_request(
            SYSTEM_PROMPT.format(content),
            history=[],
            prompt='请根据已知内容，给出处置建议'
        )

    if stream:
        return result
    if not need_deep_think:
        result = re.sub(r'<think>.*?</think>', '', result, flags=re.DOTALL).strip()
    return result
